package com.ruoyi.web.sso.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.web.sso.domain.Area;
import com.ruoyi.web.sso.domain.DTO.*;
import com.ruoyi.web.sso.domain.Staff;
import com.ruoyi.web.sso.domain.vo.*;

import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 用户信息表 服务类
 * </p>
 *
 * @author cdd
 * @since 2021-10-20
 */
public interface IStaffService {

    /**
     * 创建账号
     * @param createStaff
     * @return
     */
    AjaxResult create(CreateStaff createStaff);

    /**
     * 账号密码登录
     * @param login
     * @return
     */
    StatusResponse login(Login login, HttpServletRequest request);

    /**
     * 查询已分配用户
     * @param allocatedStaff
     * @return
     */
    List<Staff> selectAllocatedList(AllocatedStaff allocatedStaff);

    /**
     * 查询用户信息
     *
     * @param id 用户信息主键
     * @return 用户信息
     */
    public Staff selectStaffById(String id);

    /**
     * 查询用户信息列表
     *
     * @param staff 用户信息
     * @return 用户信息集合
     */
    public List<Staff> selectStaffList(Staff staff);

    /**
     * 新增用户信息
     *
     * @param staff 用户信息
     * @return 结果
     */
    public int insertStaff(Staff staff);


    /**
     * 修改用户信息
     *
     * @param staff 用户信息
     * @return 结果
     */
    public int updateStaff(Staff staff);

    /**
     * 修改用户信息
     *
     * @param staff 用户信息
     * @return 结果
     */
    public int updateStaff2(Staff staff,String paramJson);


    /**
     * 批量删除用户信息
     *
     * @param ids 需要删除的用户信息主键集合
     * @return 结果
     */
    public int deleteStaffByIds(String ids);

    /**
     * 删除用户信息信息
     *
     * @param id 用户信息主键
     * @return 结果
     */
    public int deleteStaffById(String id);


    /**
     * 查询未分配的用户角色
     * @param map
     * @return
     */
    List<Staff> selectUnallocatedList(Map<String,Object> map);


    /**
     * 查询未分配的园区用户角色
     *
     * @param map
     * @return
     */
    List<Staff>  selectAreaUnallocatedList(Map<String, Object> map);

    /**
     * 用户状态处理
     * @param staff
     * @return
     */
    AjaxResult changeStatus (Staff staff);


    /**
     * 用户状态处理
     * @param staff
     * @return
     */
    AjaxResult updatePassword(Staff staff);

    /**
     * 查询用户信息
     *
     * @param mobile 用户手机号
     * @return 用户信息
     */
     Staff selectMobileByStaff(String mobile);


    /**
     *用户id集合人查询用户对象集合
     * @param staffIds
     * @return
     */
    List<StaffDTO>  getRoleByStaffIds(String[] staffIds);


    /**
     *用户id集合人查询用户对象集合
     * @param ids
     * @return
     */
    List<StaffDTO>  getListByIds(String[]  ids);


    /**
     * 园区所有用户
     * @param areaId
     * @return
     */
    List<Map<String,Object>> getAllStaffByAreaId(String areaId,String mobile);

    /**
     * 园区员工数 [园区中除园长、副园长以为的员工数，离职不算在内]
     * @param areaId
     * @return
     */
    int getAreaStaffCount(String areaId);


    /**
     * 查询用户信息
     * @param staffId
     * @return
     */
    StaffDTO selectStaffByIdSso( String staffId);

    /**
     * 查询用户信息
     * @param staffId
     * @return
     */
    StaffDTO selectStaffByIdSsoRole( String staffId);



    /**
     * 手机号查询用户信息
     * @return
     */
    StaffDTO selectMobileByStaffSso(String mobile);

    /**
     * 修改密码
     * @param oldPassword
     * @param newPassword
     * @return
     */
    Map updatePassword(String staffId,String oldPassword, String newPassword);

    /**
     * 账号密码登录
     * @param platformId
     * @param mobile
     * @param password
     * @param ip
     * @return
     */
    StatusResponse passLogin(String platformId, String mobile,String password, String ip,int isGroup);


    /**
     * 获取用户默认角色
     * @param redisDetails
     * @return
     */
    RoleDTO getStaffRole(RedisDetails redisDetails);


    /**
     * 获取用户角色集合
     * @param redisDetails
     * @return
     */
    List<RoleDTO> getStaffRoleList(RedisDetails redisDetails);


    List<RoleDTO> getStaffRoleList(String staffId,String areaId);

    /**
     * 获取平台角色列表
     * @param platformId
     * @param staffCount
     * @return
     */
    List<RoleCountDO> getAreaRoles(String platformId, boolean staffCount);


    List<StaffDTO> getAreaStaffByRole(String roleId,Integer pageNum, Integer pageSize);


    RoleDTO setDefaultRole(RedisDetails redisDetails,String roleId) throws Exception;


    RoleDTO getDefaultRole(RedisDetails redisDetails);


    Boolean sendSms(String mobile);

    AreaDetailDTO getAreaDetailDTO(RedisDetails redisDetails);

    AreaDTO getAreaDTO(RedisDetails redisDetails);

    List<AreaListDTO> getInChargeArea(RedisDetails redisDetails);

    AreaDTO setDefaultArea(String staffId, String areaId);

    List<String> getNormalStaffIdByArea(RedisDetails redisDetails,String areaId);

    AreaSettingDTO getAreaSetting(String label, String type,  String areaId);

    List<AreaSettingDTO> getAllAreaSettings(String areaId, String prefix);

    List<StaffPageDO> getAreaStaffList(String areaId,String roleId, String realName,Integer status, Integer pageNum, Integer pageSize,String isNotStaffIds,String staffIds);

    Integer getAreaStaffListCount(String areaId,String roleId, String realName,Integer status , Integer pageNum, Integer pageSize,
                                  String isNotStaffIds,String staffIds);


    List<StaffPageDO> getGroupStaffList(String groupId, String areaId, String roleId, String realName,Integer status, Integer beginIndex, Integer pageSize);
    Integer getGroupStaffListCount(String groupId, String areaId, String roleId, String realName,Integer status);

    List<StaffDTO> getPermissionStaffDTOList(RedisDetails redisDetails,String permission);

    Boolean checkStaffPermission(RedisDetails redisDetails,String[] permission);

    Map getPermissionInfoV2(String staffId, String platformId);

    List<Map<String,Object>> staffIdByRoleList(String staffId,String roleName);

    List<AreaVO> staffIdByAreaList(String staffId, String areaName);

    List<StaffPageDO> getAreaStaffListByPermission(RedisDetails redisDetails,String permission,Integer pageNum, Integer pageSize);

    StaffDTO createStaffDTO (StaffDTO staffDTO);

    StaffDTO createStaffDTO2 (StaffDTO staffDTO,String paramJson);

    List<AreaDTO> getStaffGroupByAreaList(String staffId);

    List<Area> getGroupAll(String staffId);

    Map getStaffNameAndAreaName(String staffId, String areaId);

    StaffDTO updateStaffJobStatus(String areaId, String staffId, Integer status);

    List<StaffDTO> getStaffDTOList(String areaId);

    List<StaffInfoDTO> getStaffInfoList(String areaId,String[] staffIds);

    List<Staff> selectGroupStaffList(String groupId,String mobile);

}
